Importazione delle timbrature di ingresso/uscita da un file esterno

Creato il: 20.10.2015
Le funzionalita' descritte in questa pagina fanno riferimento ad una versione minima di Ready Pro v17.10
Tramite le funzioni ClockIn e ClockOut degli oggetti Anag e' possibile automatizzare l'importazione di timbrature da file esterni.

Supponiamo ad esempio di avere un file importato da un marcatempo esterno con una struttura simile alla seguente:
Codice	Time	I/O
RF44 2015-10-20 08:55:40 I
GG123 2015-10-20 08:58:41 I
RF44 2015-10-20 13:01:40 O
GG123 2015-10-20 13:01:10 O

dove i campi sono separati da un carattere di tabulazione ( CHR(9) ) e l'ultimo campo I/O distingue tra ingressi (I) ed uscite (O).

Il campo codice identifica il badge dell'operatore che ha marcato l'entrata/uscita, e per il nostro esempio supponiamo di averlo inserito nel campo codice alternativo 2 alfanumerico dell'anagrafica di ogni dipendente (cosi' da poter associare ogni timbratura all'anagrafica corretta).
Questo e' un esempio di script per l'importazione:

Option Explicit
 
Dim contenuto
Dim righe
Dim i
Dim elencoDipendenti
Dim campi
Dim CodiceDipendente
Dim Dipendente
Dim DataOraTimbratura
Dim conta
conta=0
 
'Carica il contenuto del file in memoria
contenuto=Rdy.LoadStringFromFile("C:\Timbrature.txt")
 
'Carica in memoria una collection con i dipendenti codificati sull'archivio
Set elencoDipendenti=Rdy.SearchAnags(7) ' 7 = anagrafiche di tipo dipendente

righe=Split(contenuto, vbCrLf)
For i=1 to Ubound(Righe) ' il ciclo parte da 1 per saltare la prima riga con le intestazioni
campi=split(righe(i),vbTab)
    if Ubound(campi)>=2 Then
        CodiceDipendente=Trim(Ucase(campi(0)))
        If CodiceDipendente<>"" Then
            ' Ricerca sulla collection il dipendente con il codice corrispondente
For Each Dipendente In elencoDipendenti
                If CodiceDipendente=Trim(Ucase(Dipendente.CustomField(7))) Then ' CustomField(7) = codice alternativo alfanumerico dell'anagrafica
DataOraTimbratura=ConversioneDataOra(campi(1))
                    If IsDate(DataOraTimbratura) Then
                        Select Case Trim(Ucase(campi(2)))
                            Case "I"
                                If Dipendente.ClockIn(DataOraTimbratura)>0 Then
                                    conta=conta+1
                                End If
                            Case "O"
                                If Dipendente.ClockOut(DataOraTimbratura)>0 Then
                                    conta=conta+1
                                End If
                        End Select
                    End If
                    Exit For
                End If
            Next
        End If
    End If
Next
Rdy.ShowMessage "Sono state importate " & conta & " nuove timbrature"
 
Function ConversioneDataOra(ByVal datatext)
    ' Converte un testo nel formato YYYY-MM-DD HH:MM:SS in un campo data
' 1234567890123456789
datatext=Trim(Ucase(datatext))
    If Len(datatext)=19 Then
        ConversioneDataOra=DateSerial(Rdy.toLong(Mid(datatext,1,4)),Rdy.toLong(Mid(datatext,6,2)),Rdy.toLong(Mid(datatext,9,2)))
        ConversioneDataOra=ConversioneDataOra+TimeSerial(Rdy.toLong(Mid(datatext,12,2)),Rdy.toLong(Mid(datatext,15,2)),Rdy.toLong(Mid(datatext,18,2)))
    End If
End Function

Dalla procedura di gestione delle presenze e' possibile verificare se l'importazione e' avvenuta correttamente, inoltre per ogni timbratura viene memorizzata la modalita' con cui questa e' avvenuta (se tramite il marcatempo interno di Ready Pro, oppure se tramite importazione da script) cosi' da consentire e semplificare eventuali controlli.

Login